home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / tools / developer-tools / andere sprachen / oberonv4 / oberon-src / system / amigagraphics.mod (.txt) < prev    next >
Encoding:
Oberon Text  |  1996-02-22  |  11.9 KB  |  488 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10b.Scn.Fnt
  3. MODULE AmigaGraphics; (*shml/cn 15-Mar-1993 *)
  4. IMPORT
  5.     SYSTEM, A:=AmigaBase,E:=AmigaExec;
  6. CONST
  7.     graphicsName*="graphics.library";
  8.     hiresLaceKey*=00008004H;
  9. (* drawing modes as Flags, not Bitposition *)
  10.     jam1*=0;
  11.     jam2*=1;
  12.     complement*=2;
  13.     inversvid*=4;
  14. (* Layer Flags *)
  15.     layerSimple*=0;
  16.     layerBackdrop*=6;
  17. (* AllocBitMap Flags *)
  18.     bmbClear*= 0;
  19.     bmbDisplayable*= 1;
  20.     bmbInterleaved*= 2;
  21.     bmbStandard*= 3;
  22.     bmbMinplanes*= 4;
  23.  Some Pointer without their records
  24.     AreaInfoPtr*=LONGINT;
  25.     ClipRectPtr*=LONGINT;
  26.     ColorMapPtr*=LONGINT;
  27.     CopListPtr*=LONGINT;
  28.     GelsInfoPtr*=LONGINT;
  29.     HookPtr*=LONGINT;
  30.     LayerPtr*=LONGINT;
  31.     LayerInfoPtr*=LONGINT;
  32.     PlanePtr*=LONGINT;
  33.     RasInfoPtr*=LONGINT;
  34.     RastPortPtr*=LONGINT;
  35.     RegionPtr*=LONGINT;
  36.     RectanglePtr*=LONGINT;
  37.     TmpRasPtr*=LONGINT;
  38.     UCopListPtr*=LONGINT;
  39.     LayerInfo*=RECORD
  40.         layer*:LayerPtr;
  41.         lp*:LayerPtr;         (* system use *)
  42.         obs*:ClipRectPtr;
  43.         freeClipRects*:E.MinList;
  44.         lock*:E.SignalSemaphore;
  45.         head*:E.List;
  46.         longreserved*:LONGINT;
  47.         flags*:INTEGER;
  48.         count*:SHORTINT;
  49.         lockLayersCount*:SHORTINT;
  50.         layerInfoExtraSize*:INTEGER;
  51.         blitbuff*:LONGINT;
  52.         layerInfoExtra*:E.PROC
  53.     END;
  54.     ViewPortPtr*=LONGINT;
  55.     ViewPort*=RECORD
  56.         next*:ViewPortPtr;
  57.         colorMap*:ColorMapPtr;
  58.         dspIns*:CopListPtr;
  59.         sprIns*:CopListPtr;
  60.         clrIns*:CopListPtr;
  61.         uCopIns*:UCopListPtr;
  62.         dWidth*,dHeight*:INTEGER;
  63.         dxOffset*,dyOffset*:INTEGER;
  64.         modes*:INTEGER;
  65.         spritePriorities*:SHORTINT;
  66.         extendedModes*:SHORTINT;
  67.         rasInfo*:RasInfoPtr
  68.     END;
  69.     TextAttr*=RECORD
  70.         name*:LONGINT;
  71.         ySize*:INTEGER;
  72.         style*:SHORTINT;
  73.         flags*:SHORTINT
  74.     END;
  75.     TextAttrPtr*=LONGINT;
  76.     TextFont*=RECORD
  77.         message*:E.Message;
  78.         ySize*:INTEGER;
  79.         style*:SHORTINT;
  80.         flags*:SHORTINT;
  81.         xSize*:INTEGER;
  82.         baseline*:INTEGER;
  83.         boldSmear*:INTEGER;
  84.         accessors*:INTEGER;
  85.         loChar*:CHAR;
  86.         hiChar*:CHAR;
  87.         charData*:LONGINT;
  88.         modulo*:INTEGER;
  89.         charLoc*:LONGINT;
  90.         charSpace*:LONGINT;
  91.         charKern*:LONGINT
  92.     END;
  93.     TextFontPtr*=LONGINT;
  94.     BitMap*=RECORD
  95.         bytesPerRow*:INTEGER;
  96.         rows*:INTEGER;
  97.         flags*:SHORTINT;
  98.         depth*:SHORTINT;
  99.         pad*:INTEGER;
  100.         planes*:ARRAY 8 OF PlanePtr
  101.     END;
  102.     BitMapPtr*=LONGINT;
  103.     BitMapPointer*=POINTER TO BitMap;
  104.     Rectangle*=RECORD
  105.         minX*,minY*,maxX*,maxY*:INTEGER
  106.     END;
  107.     LayerPointer*=POINTER TO Layer;
  108.     Layer*=RECORD
  109.         front*:LayerPtr;
  110.         back*:LayerPtr;
  111.         clipRect*:ClipRectPtr;
  112.         rp*:RastPortPtr;
  113.         bounds*:Rectangle;
  114.         reserved:ARRAY 4 OF SYSTEM.BYTE;
  115.         priority*:INTEGER;
  116.         flags*:INTEGER;
  117.         superBitMap*:BitMapPtr;
  118.         superClipRect*:ClipRectPtr;
  119.         window*:LONGINT;
  120.         scrollX*:INTEGER;
  121.         scrollY*:INTEGER;
  122.         cr*:ClipRectPtr;
  123.         cr2*:ClipRectPtr;
  124.         crnew*:ClipRectPtr;
  125.         superSaveClipRects*:ClipRectPtr;
  126.         cliprects*:ClipRectPtr;
  127.         layerInfo*:LayerInfoPtr;
  128.         lock*:E.SignalSemaphore;
  129.         backFill*:HookPtr;
  130.         reserved1:LONGINT;
  131.         clipRegion*:RegionPtr;
  132.         saveClipRects*:RegionPtr;
  133.         width*,height*:INTEGER;
  134.         reserved2:ARRAY 18 OF SYSTEM.BYTE;
  135.         damageList*:RegionPtr
  136.     END;
  137.     RastPortPointer*=POINTER TO RastPort;
  138.     RastPort*=RECORD
  139.         layer*:LayerPtr;
  140.         bitMap*:BitMapPtr;
  141.         areaPtrn*:LONGINT;
  142.         tmpRas*:TmpRasPtr;
  143.         areaInfo*:AreaInfoPtr;
  144.         gelsInfo*:GelsInfoPtr;
  145.         mask*:SHORTINT;
  146.         fgPen*:SHORTINT;
  147.         bgPen*:SHORTINT;
  148.         aOlPen*:SHORTINT;
  149.         drawMode*:SHORTINT;
  150.         areaPtSz*:SHORTINT;
  151.         linPatCnt*:SHORTINT;
  152.         dummy*:SHORTINT;
  153.         flags*:INTEGER;
  154.         linePtrn*:INTEGER;
  155.         x*,y*:INTEGER;
  156.         minterms*:ARRAY 8 OF SHORTINT;
  157.         penWidth*:INTEGER;
  158.         penHeight*:INTEGER;
  159.         font*:TextFontPtr;
  160.         algoStyle*:SHORTINT;
  161.         txFlags*:SHORTINT;
  162.         txHeigh*:INTEGER;
  163.         txWidth*:INTEGER;
  164.         txBaselin*:INTEGER;
  165.         txSpacing*:INTEGER;
  166.         user*:LONGINT;
  167.         longreserved*:ARRAY 2 OF LONGINT;
  168.         wordreserved*:ARRAY 7 OF INTEGER;
  169.         reserved*:ARRAY 8 OF SHORTINT
  170.     END;
  171.     gfxBase:LONGINT;
  172.     gfxVersion-:INTEGER;
  173. PROCEDURE AddFont*(textFontPtr:TextFontPtr);
  174.     r:A.Regs;
  175. BEGIN
  176.     r.a[1]:=textFontPtr;
  177.     A.LibCall(gfxBase,-480,r)
  178. END AddFont;
  179. PROCEDURE AllocRaster*(width,height:INTEGER):PlanePtr;
  180.     r:A.Regs;
  181. BEGIN
  182.     r.d[0]:=width;
  183.     r.d[1]:=height;
  184.     A.LibCall(gfxBase,-492,r);
  185.     RETURN r.d[0]
  186. END AllocRaster;
  187. PROCEDURE BltBitMapRastPort*(
  188.            srcBitMap:BitMapPtr;
  189.            xSrc,ySrc:INTEGER;
  190.            destRP:RastPortPtr;
  191.            xDest,yDest:INTEGER;
  192.            xSize,ySize:INTEGER;
  193.            minterm:CHAR);
  194.     r:A.Regs;
  195. BEGIN
  196.     r.a[0]:=SYSTEM.VAL(LONGINT,srcBitMap);
  197.     r.d[0]:=xSrc;
  198.     r.d[1]:=ySrc;
  199.     r.a[1]:=SYSTEM.VAL(LONGINT,destRP);
  200.     r.d[2]:=xDest;
  201.     r.d[3]:=yDest;
  202.     r.d[4]:=xSize;
  203.     r.d[5]:=ySize;
  204.     r.d[6]:=ORD(minterm);
  205.     A.LibCall(gfxBase,-606,r)
  206. END BltBitMapRastPort;
  207. PROCEDURE BltPattern*(
  208.            rp:RastPortPtr;
  209.            mask:LONGINT;
  210.            xl,yl:INTEGER;
  211.            maxX,maxY:INTEGER;
  212.            byteCnt:INTEGER);
  213.     r:A.Regs;
  214. BEGIN
  215.     r.a[0]:=mask;
  216.     r.a[1]:=rp;
  217.     r.d[0]:=xl;
  218.     r.d[1]:=yl;
  219.     r.d[2]:=maxX;
  220.     r.d[3]:=maxY;
  221.     r.d[4]:=byteCnt;
  222.     A.LibCall(gfxBase,-312,r)
  223. END BltPattern;
  224. PROCEDURE BltTemplate*(
  225.            srcTemplate:LONGINT;
  226.            srcX,srcMod:INTEGER;
  227.            rp:RastPortPtr;
  228.            dstX,dstY:INTEGER;
  229.            sizeX,sizeY:INTEGER);
  230.     r:A.Regs;
  231. BEGIN
  232.     r.a[0]:=srcTemplate;
  233.     r.d[0]:=srcX;
  234.     r.d[1]:=srcMod;
  235.     r.a[1]:=rp;
  236.     r.d[2]:=dstX;
  237.     r.d[3]:=dstY;
  238.     r.d[4]:=sizeX;
  239.     r.d[5]:=sizeY;
  240.     A.LibCall(gfxBase,-36,r)
  241. END BltTemplate;
  242. PROCEDURE ClipBlit*(
  243.            srcRP:RastPortPtr;
  244.            xSrc,ySrc:INTEGER;
  245.            destRP:RastPortPtr;
  246.            xDest,yDest:INTEGER;
  247.            xSize,ySize:INTEGER;
  248.            minterm:CHAR);
  249.     r:A.Regs;
  250. BEGIN
  251.     r.a[0]:=SYSTEM.VAL(LONGINT,srcRP);
  252.     r.d[0]:=xSrc;
  253.     r.d[1]:=ySrc;
  254.     r.a[1]:=SYSTEM.VAL(LONGINT,destRP);
  255.     r.d[2]:=xDest;
  256.     r.d[3]:=yDest;
  257.     r.d[4]:=xSize;
  258.     r.d[5]:=ySize;
  259.     r.d[6]:=ORD(minterm);
  260.     A.LibCall(gfxBase,-552,r)
  261. END ClipBlit;
  262. PROCEDURE CloseFont*(font:TextFontPtr);
  263.     r:A.Regs;
  264. BEGIN
  265.     r.a[1]:=font;
  266.     A.LibCall(gfxBase,-78,r)
  267. END CloseFont;
  268. PROCEDURE DisposeRegion*(region:RegionPtr);
  269.     r:A.Regs;
  270. BEGIN
  271.     r.a[0]:=region;
  272.     A.LibCall(gfxBase,-534,r)
  273. END DisposeRegion;
  274. PROCEDURE Draw*(rp:RastPortPtr; x,y:INTEGER);
  275.     r:A.Regs;
  276. BEGIN
  277.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  278.     r.d[0]:=x;
  279.     r.d[1]:=y;
  280.     A.LibCall(gfxBase,-246,r)
  281. END Draw;
  282. PROCEDURE DrawEllipse*(rp:RastPortPtr; x,y,a,b:INTEGER);
  283.     r:A.Regs;
  284. BEGIN
  285.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  286.     r.d[0]:=x;
  287.     r.d[1]:=y;
  288.     r.d[2]:=a;
  289.     r.d[3]:=b;
  290.     A.LibCall(gfxBase,-180,r)
  291. END DrawEllipse;
  292. PROCEDURE FreeRaster*(p:PlanePtr; width,height:INTEGER);
  293.     r:A.Regs;
  294. BEGIN
  295.     r.a[0]:=p;
  296.     r.d[0]:=width;
  297.     r.d[1]:=height;
  298.     A.LibCall(gfxBase,-498,r)
  299. END FreeRaster;
  300. PROCEDURE GetRGB4*(colorMap:ColorMapPtr; entry:LONGINT):INTEGER;
  301.     r:A.Regs;
  302. BEGIN
  303.     r.a[0]:=colorMap;
  304.     r.d[0]:=entry;
  305.     A.LibCall(gfxBase,-582,r);
  306.     RETURN SHORT(r.d[0])
  307. END GetRGB4;
  308. PROCEDURE GetRGB32*(colorMap:ColorMapPtr; firstcolor,ncolors:LONGINT; VAR table:ARRAY OF SYSTEM.BYTE);
  309.     r:A.Regs;
  310. BEGIN
  311.     r.a[0]:=colorMap;
  312.     r.d[0]:=firstcolor;
  313.     r.d[1]:=ncolors;
  314.     r.a[1]:=SYSTEM.ADR(table);
  315.     A.LibCall(gfxBase,-900,r)
  316. END GetRGB32;
  317. PROCEDURE GetVPModeID*(vp:ViewPortPtr):LONGINT;
  318.     r:A.Regs;
  319. BEGIN
  320.     r.a[0]:=vp;
  321.     A.LibCall(gfxBase,-792,r);
  322.     RETURN r.d[0]
  323. END GetVPModeID;
  324. PROCEDURE InitBitMap*(VAR bitMap:BitMap; depth,width,height:INTEGER);
  325.     r:A.Regs;
  326. BEGIN
  327.     r.a[0]:=SYSTEM.ADR(bitMap);
  328.     r.d[0]:=depth;
  329.     r.d[1]:=width;
  330.     r.d[2]:=height;
  331.     A.LibCall(gfxBase,-390,r)
  332. END InitBitMap;
  333. PROCEDURE InitRastPort*(VAR rp:RastPort);
  334.     r:A.Regs;
  335. BEGIN
  336.     r.a[1]:=SYSTEM.ADR(rp);
  337.     A.LibCall(gfxBase,-198,r)
  338. END InitRastPort;
  339. PROCEDURE Move*(rp:RastPortPtr; x,y:INTEGER);
  340.     r:A.Regs;
  341. BEGIN
  342.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  343.     r.d[0]:=x;
  344.     r.d[1]:=y;
  345.     A.LibCall(gfxBase,-240,r)
  346. END Move;
  347. PROCEDURE NewRegion*():RegionPtr;
  348.     r:A.Regs;
  349. BEGIN
  350.     A.LibCall(gfxBase,-516,r);
  351.     RETURN r.d[0]
  352. END NewRegion;
  353. PROCEDURE OrRectRegion*(region:RegionPtr; rectangle:RectanglePtr):BOOLEAN;
  354.     r:A.Regs;
  355. BEGIN
  356.     r.a[0]:=region;
  357.     r.a[1]:=rectangle;
  358.     A.LibCall(gfxBase,-510,r);
  359.     RETURN r.d[0]#0
  360. END OrRectRegion;
  361. PROCEDURE ReadPixel*(rp:RastPortPtr; x,y:INTEGER):INTEGER;
  362.     r:A.Regs;
  363. BEGIN
  364.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  365.     r.d[0]:=x;
  366.     r.d[1]:=y;
  367.     A.LibCall(gfxBase,-318,r);
  368.     RETURN SHORT(r.d[0])
  369. END ReadPixel;
  370. PROCEDURE RectFill*(rp:RastPortPtr; xMin,yMin,xMax,yMax:INTEGER);
  371.     r:A.Regs;
  372. BEGIN
  373.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  374.     r.d[0]:=xMin;
  375.     r.d[1]:=yMin;
  376.     r.d[2]:=xMax;
  377.     r.d[3]:=yMax;
  378.     A.LibCall(gfxBase,-306,r)
  379. END RectFill;
  380. PROCEDURE SetAPen*(rp:RastPortPtr; pen:INTEGER);
  381.     r:A.Regs;
  382. BEGIN
  383.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  384.     r.d[0]:=pen;
  385.     A.LibCall(gfxBase,-342,r)
  386. END SetAPen;
  387. PROCEDURE SetBPen*(rp:RastPortPtr; pen:INTEGER);
  388.     r:A.Regs;
  389. BEGIN
  390.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  391.     r.d[0]:=pen;
  392.     A.LibCall(gfxBase,-348,r)
  393. END SetBPen;
  394. PROCEDURE SetDrMd*(rp:RastPortPtr; drawMode:SHORTINT);
  395.     r:A.Regs;
  396. BEGIN
  397.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  398.     r.d[0]:=drawMode;
  399.     A.LibCall(gfxBase,-354,r)
  400. END SetDrMd;
  401. PROCEDURE SetFont*(rp:RastPortPtr; textFont:TextFontPtr);
  402.     r:A.Regs;
  403. BEGIN
  404.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  405.     r.a[0]:=SYSTEM.VAL(LONGINT, textFont);
  406.     A.LibCall(gfxBase,-66,r)
  407. END SetFont;
  408. PROCEDURE SetRGB4*(vp:ViewPortPtr; index,red,green,blue:INTEGER);
  409.     r:A.Regs;
  410. BEGIN
  411.     r.a[0]:=SYSTEM.VAL(LONGINT,vp);
  412.     r.d[0]:=index;
  413.     r.d[1]:=red;
  414.     r.d[2]:=green;
  415.     r.d[3]:=blue;
  416.     A.LibCall(gfxBase,-288,r)
  417. END SetRGB4;
  418. PROCEDURE SetRGB32*(vp:ViewPortPtr; index,red,green,blue:LONGINT);
  419.     r:A.Regs;
  420. BEGIN
  421.     r.a[0]:=SYSTEM.VAL(LONGINT,vp);
  422.     r.d[0]:=index;
  423.     r.d[1]:=red;
  424.     r.d[2]:=green;
  425.     r.d[3]:=blue;
  426.     A.LibCall(gfxBase,-852,r)
  427. END SetRGB32;
  428. PROCEDURE Text*(rp:RastPortPtr; string:ARRAY OF CHAR; count:LONGINT);
  429. VAR r:A.Regs;
  430. BEGIN
  431.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  432.     r.a[0]:=SYSTEM.ADR(string);
  433.     r.d[0]:=count;
  434.     A.LibCall(gfxBase,-60,r)
  435. END Text;
  436. PROCEDURE WaitBlit*();
  437. VAR r:A.Regs;
  438. BEGIN
  439.     A.LibCall(gfxBase,-228,r)
  440. END WaitBlit;
  441. PROCEDURE WritePixel*(rp:RastPortPtr; x,y:INTEGER):BOOLEAN;
  442. VAR r:A.Regs;
  443. BEGIN
  444.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  445.     r.d[0]:=x;
  446.     r.d[1]:=y;
  447.     A.LibCall(gfxBase,-324,r);
  448.     RETURN r.d[0]#0
  449. END WritePixel;
  450. (* New procedures from V39 *)
  451. PROCEDURE SetWriteMask*(rp:RastPortPtr; Mask:LONGINT)(*:BOOLEAN*);
  452. VAR r:A.Regs;
  453. BEGIN
  454.     r.a[0]:=SYSTEM.VAL(LONGINT,rp);
  455.     r.d[0]:=Mask;
  456.     A.LibCall(gfxBase,-984,r);
  457.     (*RETURN r.d[0]#0*)  (* SetWriteMask returns, if device supports WriteMask; ignore it *)
  458. END SetWriteMask;
  459. PROCEDURE AllocBitMap*(x, y, depth: LONGINT; flags: SET; friendBitMap: BitMapPtr):BitMapPtr;
  460. VAR r:A.Regs;
  461. BEGIN
  462.     r.d[0]:=x;
  463.     r.d[1]:=y;
  464.     r.d[2]:=depth;
  465.     r.d[3]:=SYSTEM.VAL(LONGINT, flags);
  466.     r.a[0]:=friendBitMap;
  467.     A.LibCall(gfxBase,-918,r);
  468.     RETURN r.d[0]
  469. END AllocBitMap;
  470. PROCEDURE FreeBitMap*(bm: BitMapPtr);
  471. VAR r:A.Regs;
  472. BEGIN
  473.     r.a[0]:=bm;
  474.     A.LibCall(gfxBase,-924,r)
  475. END FreeBitMap;
  476. PROCEDURE Init;
  477.     LibraryPtr=POINTER TO E.Library;
  478.     lib:LibraryPtr;
  479. BEGIN
  480.     gfxBase:=E.OpenLibrary(graphicsName,37);
  481.     IF gfxBase=0 THEN HALT(99) END;
  482.     lib:=SYSTEM.VAL(LibraryPtr,gfxBase);
  483.     gfxVersion:=lib.version
  484. END Init;
  485. BEGIN
  486.     Init
  487. END AmigaGraphics.
  488.